package com.aurora.controller;


import com.aurora.entity.Baidu;
import com.aurora.model.vo.Result;
import com.aurora.service.BaiduService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.List;

/**
 * <p>(Baidu)表控制层
 *
 * @author makejava
 * @since 2022-10-21 09:11:49
 */
@RestController
@RequestMapping("/baidu")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Api(tags = "百度接口")
public class BaiduController {
    /**
     * 服务对象
     */
    private final BaiduService baiduService;

    /**
     * 分页查询所有数据
     *
     * @param page  分页对象
     * @param baidu 查询实体
     * @return 所有数据
     */
    @GetMapping
    public Result<?> selectAll(Page<Baidu> page, Baidu baidu) {
        LambdaQueryWrapper<Baidu> baiduLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //如果baidu.name不为空，就是模糊查询
        if (StringUtils.isNotBlank(baidu.getBaiduName())) {
            baiduLambdaQueryWrapper.like(Baidu::getBaiduName, baidu.getBaiduName());
        }
        return Result.ok(this.baiduService.page(page, baiduLambdaQueryWrapper));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public Result<?> selectOne(@PathVariable Serializable id) {
        return Result.ok(this.baiduService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param baidu 实体对象
     * @return 新增结果
     */
    @PostMapping
    public Result<?> insert(@RequestBody Baidu baidu) {
        return Result.ok(this.baiduService.save(baidu));
    }

    /**
     * 修改数据
     *
     * @param baidu 实体对象
     * @return 修改结果
     */
    @PutMapping
    public Result<?> update(@RequestBody Baidu baidu) {
        return Result.ok(this.baiduService.updateById(baidu));
    }

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @DeleteMapping
    @ApiOperation("批量删除")
    public Result<?> delete(@RequestParam("idList") List<Long> idList) {
        return Result.ok(this.baiduService.removeByIds(idList));
    }

    /**
     * 请求授权码 百度登录接口
     */
    @GetMapping("/login")
    public void login(HttpServletResponse response) throws IOException {
        response.sendRedirect(baiduService.login());
    }

    /**
     * 授权码回调
     */
    @GetMapping("/callBack")
    @ApiOperation(value = "授权码回调")
    public Result<?> callBack(String code) throws UnsupportedEncodingException {

        return baiduService.callBack(code);
    }

    /**
     * 获取百度文件列表
     *
     * @param id 路径
     * @return 文件列表
     */
    @ApiOperation("获取百度文件列表")
    @GetMapping("/fileList")
    public Result<?> fileList(String id, String page) {
        return baiduService.fileList(id, page);
    }

    /**
     * 获取百度图片列表
     *
     * @param id 路径
     * @return 文件列表
     */
    @ApiOperation("获取百度图片列表")
    @GetMapping("/photoList")
    public Result<?> photoList(String id, String page) {
        return baiduService.photoList(id, page);
    }

    /**
     * 刷新TOKEN
     *
     * @param id 刷新TOKEN
     * @return void
     */
    @GetMapping("/refreshToken")
    public Result<?> refreshToken(String id) throws UnsupportedEncodingException {
        return baiduService.refreshTokenC(id);
    }

    /**
     * 通过用户Id 得到access token
     *
     * @param id 用户Id
     * @return access token
     */
    @GetMapping("/getAccessToken")
    public Result<?> getAccessToken(String id) {
        return Result.ok(baiduService.getById(id));
    }

    /**
     * 生成链接
     */
    @GetMapping("/getLink")
    public Result<?> getLink() {
        return Result.ok(baiduService.login());
    }
}

